import os
import sys
import shutil
import ffmpeg
import argparse
import platform

parser = argparse.ArgumentParser(description='''
    将application/octet-stream文件转成mp4
    -d 存放视频目录
    -f 存放分类视频文件夹名的文件
    输出到 [存放视频目录\\video\\*.mp4]
''')


# 视频url
parser.add_argument("-d", "--dir", type=str, default=None, help="video file dir; 视频文件目录")
# 输出文件
parser.add_argument("-f", "--file", type=str, default=None, help="mate path file; 存放分类视频文件夹名的文件")
# 脚本参数
args = parser.parse_args()

# 读取文件
def read_file(file_path):
    with open(file_path, 'r') as f:
        return f.readlines()

# 转成mp4
def convert_to_mp4(input_file, output_file):
    print(f'input: {input_file}, output: {output_file}')
    try:
        ffmpeg.input(input_file).output(output_file, vcodec='copy', acodec='copy', loglevel='quiet').run()
    except ffmpeg.Error as e:
        print('ffmpeg error:', e.stderr)
    print(f'{output_file} ==> 格式转换完成!')

# 合并视频
def concat_ts_into_mp4(input_dir, output_file):
    if not os.path.exists(output_file):
        os.makedirs(output_file)
        print(output_file, '=== 目录创建成功')
    else:
        print(output_file, '=== 目录存在')
    # 获取所有视频文件的路径
    input_files = sorted([os.path.join(input_dir, f) for f in os.listdir(input_dir) if not f.endswith('.DS_Store')])
    for input_file in input_files:
        if platform.system() == 'Windows':
            suffix = input_file.split('\\')[-1]
            out = output_file + '\\' + suffix
        else:
            suffix = input_file.split('/')[-1]
            out = output_file + '/' + suffix
        convert_to_mp4(input_file, out)


if __name__ == "__main__":
    if args.dir and args.file:
        dir_name = args.dir
        file_path = args.file
        # 视频文件夹
        video_path = os.path.join(dir_name, 'video')
        if not os.path.exists(video_path):
            os.makedirs(video_path)
            print(video_path, '=== 目录创建成功')
        else:
            print(video_path, '=== 目录存在')
        for line in read_file(file_path):
            input_dir = os.path.join(dir_name, line.strip('\n'))
            concat_ts_into_mp4(input_dir, os.path.join(video_path, line.strip('\n')))
    else:
        parser.print_help()
